﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//using System.Data;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Text;

namespace WebPeajes.Paginas
{
    public partial class ManttoCobradores : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Actualizar();
            }
        }

        private void Limpiar()
        {
            txtNombres.Text = "";
            txtApellidos.Text = "";
            txtDNI.Text = "";
            txtDNI.Enabled = true;
            txtFechaNacimiento.Text = "";
            txtTelefono.Text = "";
            txtUsuario.Text = "";
            txtClave.Text = "";
            chkEstado.Checked = false;
            lblMensaje.Text = "";
        }

        public void Actualizar()
        {
            try
            {
                HttpWebRequest req5 = (HttpWebRequest)WebRequest.Create("http://localhost:17279/Empleados.svc/Empleados");
                req5.Method = "GET";
                HttpWebResponse res5 = (HttpWebResponse)req5.GetResponse();
                StreamReader reader5 = new StreamReader(res5.GetResponseStream());
                string listaJson = reader5.ReadToEnd();
                JavaScriptSerializer js5 = new JavaScriptSerializer();
                List<Empleado> listaEmpleados = js5.Deserialize<List<Empleado>>(listaJson);

                gvEmpleados.DataSource = listaEmpleados;
                gvEmpleados.DataBind();
            }
            catch (Exception)
            {                
                throw;
            }
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            Empleado objEmpleado = new Empleado();
            objEmpleado.Codigo = idCorrelativo();
            objEmpleado.Nombre = txtNombres.Text.Trim();
            objEmpleado.Apellido = txtApellidos.Text.Trim();
            objEmpleado.DNI = int.Parse(txtDNI.Text);
            objEmpleado.FechaNacimiento = txtFechaNacimiento.Text;
            objEmpleado.Telefono = txtTelefono.Text;
            objEmpleado.Usuario = txtUsuario.Text.Trim();
            objEmpleado.Clave = txtClave.Text.Trim();
            objEmpleado.Estado = chkEstado.Checked ? 1 : 0;

            var serializar = new JavaScriptSerializer();
            string postdata = serializar.Serialize(objEmpleado);
            byte[] data = Encoding.UTF8.GetBytes(postdata);

            HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:17279/Empleados.svc/Empleados");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            HttpWebResponse res = null;

            try
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string empleadoJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();

                Empleado empleadoCreado = new Empleado();
                empleadoCreado = js.Deserialize<Empleado>(empleadoJson);
                                               
                Actualizar();
                Limpiar();

                lblMensaje.Text = "Se registró satisfactoriamente " + empleadoCreado.Nombre + " " + empleadoCreado.Apellido + "'";
            }
            catch (WebException a)
            {
                HttpWebResponse resError = (HttpWebResponse)a.Response;
                StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                string error = reader2.ReadToEnd();

                JavaScriptSerializer js = new JavaScriptSerializer();
                MensajeError exception = new MensajeError();
                exception = js.Deserialize<MensajeError>(error);

                lblMensaje.Text = exception.Mensaje;
            }
        }
        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            GridViewRow fila = gvEmpleados.SelectedRow;
            Empleado objEmpleado = new Empleado();
            objEmpleado.Codigo = int.Parse(fila.Cells[1].Text);
            objEmpleado.Nombre = txtNombres.Text.Trim();
            objEmpleado.Apellido = txtApellidos.Text.Trim();
            objEmpleado.DNI = int.Parse(txtDNI.Text);
            objEmpleado.FechaNacimiento = txtFechaNacimiento.Text;
            objEmpleado.Telefono = txtTelefono.Text;
            objEmpleado.Usuario = txtUsuario.Text.Trim();
            objEmpleado.Clave = txtClave.Text.Trim();
            objEmpleado.Estado = chkEstado.Checked ? 1 : 0;

            var serializar = new JavaScriptSerializer();
            string postdata = serializar.Serialize(objEmpleado);
            byte[] data3 = Encoding.UTF8.GetBytes(postdata);

            HttpWebRequest req3 = (HttpWebRequest)WebRequest
                .Create("http://localhost:17279/Empleados.svc/Empleados");
            req3.Method = "PUT";
            req3.ContentLength = data3.Length;
            req3.ContentType = "application/json";
            var reqStream3 = req3.GetRequestStream();
            reqStream3.Write(data3, 0, data3.Length);
            HttpWebResponse res3 = null;

            try
            {
                res3 = (HttpWebResponse)req3.GetResponse();
                StreamReader reader = new StreamReader(res3.GetResponseStream());
                string empleadoJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();

                Empleado empleadoAModificar = new Empleado();
                empleadoAModificar = js.Deserialize<Empleado>(empleadoJson);

                Actualizar();
                Limpiar();
                btnActualizar.Enabled = false;
                btnAgregar.Enabled = true;

                lblMensaje.Text = "Se actualizó satisfactoriamente " + empleadoAModificar.Nombre + " " + empleadoAModificar.Apellido + "'";
            }
            catch (WebException a)
            {
                HttpStatusCode code = ((HttpWebResponse)a.Response).StatusCode;
                string message = ((HttpWebResponse)a.Response).StatusDescription;
                StreamReader reader = new StreamReader(a.Response.GetResponseStream());
                string error = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                string mensaje = js.Deserialize<string>(error);
                 
                Limpiar();

                lblMensaje.Text = "Error " + mensaje + "'";
            }
        }

        private int idCorrelativo()
        {
            HttpWebRequest req2 = (HttpWebRequest)WebRequest
                    .Create("http://localhost:17279/Empleados.svc/EmpleadoID");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            int correlativo = js2.Deserialize<int>(unidadJson2);

            return correlativo;
        }

        protected void gvEmpleados_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow fila = gvEmpleados.SelectedRow;
            txtNombres.Text = fila.Cells[3].Text;
            txtApellidos.Text = fila.Cells[4].Text;
            txtDNI.Text = fila.Cells[2].Text;
            txtDNI.Enabled=false;
            txtFechaNacimiento.Text = fila.Cells[5].Text;
            txtTelefono.Text = fila.Cells[6].Text;

            CheckBox caja = fila.Cells[9].Controls[1] as CheckBox;
            chkEstado.Checked = caja.Checked ? true : false;

            btnActualizar.Enabled = true;
            btnAgregar.Enabled = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpiar();
            btnActualizar.Enabled = false;
            btnAgregar.Enabled = true;
        }

        protected void gvEmpleados_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string codigo = gvEmpleados.DataKeys[e.RowIndex].Value.ToString();
            GridViewRow fila = gvEmpleados.SelectedRow;
            txtNombres.Text = fila.Cells[3].Text;
            txtApellidos.Text = fila.Cells[4].Text;

            try
            {   
                var serializar = new JavaScriptSerializer();
                string postdata = serializar.Serialize(codigo);
                byte[] data4 = Encoding.UTF8.GetBytes(postdata);

                HttpWebRequest req4 = (HttpWebRequest)WebRequest.Create("http://localhost:17279/Empleados.svc/Empleados");
                req4.Method = "DELETE";
                req4.ContentLength = data4.Length;
                req4.ContentType = "application/json";
                var reqStream2 = req4.GetRequestStream();
                reqStream2.Write(data4, 0, data4.Length);
                var res4 = (HttpWebResponse)req4.GetResponse();
                
                Actualizar();
                Limpiar();

                lblMensaje.Text = "Se eliminó " + txtNombres.Text + " " +txtApellidos.Text;
            }
            catch (Exception)
            {
                throw; 
            }
        }

        protected void gvEmpleados_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton l = (LinkButton)e.Row.FindControl("lkEliminar");
                l.Attributes.Add("onclick","javascript:return "+ 
                    "confirm('Esta seguro de eliminar a: " +
                    DataBinder.Eval(e.Row.DataItem,"Nombre") +"')");
            }
        }
    }

    public class Empleado
    {
        public int Codigo { get; set; }
        public int DNI { get; set; }
        public string Nombre { get; set; }
        public string Apellido { get; set; }
        public string FechaNacimiento { get; set; }
        public string Telefono { get; set; }
        public int Estado { get; set; }
        public string Usuario { get; set; }
        public string Clave { get; set; }
    }

    public class MensajeError
    {
        public string Codigo { get; set; }
        public string Mensaje { get; set; }
    }
}